package com.atmk.atmk.designMode.创建型.单例模式.懒汉式;

import java.util.stream.IntStream;

//线程安全，同步方法（不推荐）
/*
*    1) 解决了线程不安全问题
*    2) 效率太低了，每个线程在想获得类的实例时候，执行getInstance()方法都要进行
*    同步。而其实这个方法只执行一次实例化代码就够了，后面的想获得该类实例，
*    直接return就行了。方法进行同步效率太低
 *   3) 结论：在实际开发中，不推荐使用这种方式
* */
/*
* 在你提供的代码中，getInstance() 方法使用了 synchronized 关键字，这意味着只有一个线程可以同时访问该方法。
* 当第一个线程进入 getInstance() 方法时，会获取到锁，其他线程将被阻塞直到第一个线程执行完毕。
* 这样会导致不必要的同步，即使实例已经被创建，其他线程仍然需要等待获取锁，这会影响性能。
* */
public class Singleton4 {
    private Singleton4(){}
    private static Singleton4 instance;

    public static synchronized Singleton4 getInstance(){
        if(instance ==null){
            instance = new Singleton4();
        }
        return instance;
    }
    public static void main(String[] args) {
        IntStream.range(1,10000)
                .forEach(i->{
                    new Thread(()->{
                        System.out.println("第"+i+"个："+ Singleton4.getInstance().hashCode());;
                    }).start();
                });
    }
}
